/**
  ******************************************************************************
  * @file    charconvert.c
  * @author  Dragon.Chen
  * @version V1.0.0
  * @date    07-22-2013
  * @brief   字符编码相互转化
  ******************************************************************************
  * @attention
  *
  * <h2><center>&copy; COPYRIGHT 2013 上海今中网络科技有限公司 </center></h2>
  ******************************************************************************
  */

#include "charconvert.h"


/**
  * @brief  从一种编码转为另一种编码
  * @param  arg1:原字符编码
            arg2:转换成的字符编码
            arg3:待转换字符
            arg4:带转换字符个数
            arg5:转换的字符
            arg6:剩余的字符个数
  * @retval 0:转换成功  1：转换失败
  */
int code_convert(char *from_charset, char *to_charset, char *inbuf, size_t inlen, char *outbuf, size_t outlen)
{
    iconv_t cd;
    char **pin = &inbuf;
    char **pout = &outbuf;
    cd = iconv_open(to_charset, from_charset);
    if (iconv(cd, pin, &inlen, pout, &outlen) == -1)
        return 1;
    iconv_close(cd) ;
    return 0;
}


/**
  * @brief  UTF8转GB2312
  * @param  arg1:待转换字符
            arg2:带转换字符个数
            arg3:转换的字符
            arg4:剩余的字符个数
  * @retval 0:转换成功  1：转换失败
  */
int UTF8_to_GB2312(char *inbuf, size_t inlen, char *outbuf, size_t outlen)
{
    return code_convert("UTF-8", "GB2312", inbuf, inlen ,outbuf , outlen);
}


/**
  * @brief  GB2312转UTF8
  * @param  arg1:待转换字符
            arg2:带转换字符个数
            arg3:转换的字符
            arg4:剩余的字符个数
  * @retval 0:转换成功  1：转换失败
  */
int GB2312_to_UTF8(char *inbuf, size_t inlen, char *outbuf, size_t outlen)
{
    return code_convert("GB2312", "UTF-8", inbuf, inlen, outbuf, outlen);
}

/**
  * @brief  获取汉字首字符
  * @param  arg1:汉字GB2312编码
  * @retval 汉字首字符
  */
char get_firstchar_from_pinyin(unsigned char *src)
{
    int value = src[0] * 256 + src[1];

    if (value < 0xB0A1) return '*';
    if (value < 0xB0C5) return 'a';
    if (value < 0xB2C1) return 'b';
    if (value < 0xB4EE) return 'c';
    if (value < 0xB6EA) return 'd';
    if (value < 0xB7A2) return 'e';
    if (value < 0xB8C1) return 'f';
    if (value < 0xB9FE) return 'g';
    if (value < 0xBBF7) return 'h';
    if (value < 0xBFA6) return 'j';
    if (value < 0xC0AC) return 'k';
    if (value < 0xC2E8) return 'l';
    if (value < 0xC4C3) return 'm';
    if (value < 0xC5B6) return 'n';
    if (value < 0xC5BE) return 'o';
    if (value < 0xC6DA) return 'p';
    if (value < 0xC8BB) return 'q';
    if (value < 0xC8F6) return 'r';
    if (value < 0xCBFA) return 's';
    if (value < 0xCDDA) return 't';
    if (value < 0xCEF4) return 'w';
    if (value < 0xD1B9) return 'x';
    if (value < 0xD4D1) return 'y';
    if (value < 0xD7FA) return 'z';
    return '*';
}


/**
  * @brief  获取汉字首字符集合
  * @param  arg1:汉字首字符集合目标集合  arg2:带转换编码集合  arg3:带转换字符集合的长度
  * @retval 汉字首字符集合
  */
char *get_firstcharset_from_pinyin(char *dst, unsigned char *src, int len)
{
    int i = 0, j = 0;
    unsigned char word[3] = {0};

    for (i=0; i<len; )
    {
        if (src[i] > 0XA0 && src[i+1] > 0XA0)
        {
            word[0] = src[i];
            word[1] = src[i+1];
            dst[j++] = get_firstchar_from_pinyin(word);
            i += 2;
        }
        else
        {
            dst[j++] = (char)src[i++];
        }
    }

    return dst;
}


/******************* (C) COPYRIGHT 2013 上海今中网络科技有限公司 *****END OF FILE****/










